package g

import (
	"beesoft.ink/application/media/app/model/common"
	"fmt"
	"os"
	"sync"
	"xorm.io/xorm/log"

	_ "github.com/go-sql-driver/mysql"
	"github.com/spf13/viper"
	"xorm.io/xorm"
)

var (
	once sync.Once
	db   *xorm.Engine
)

func DB() *xorm.Engine {
	once.Do(func() {
		db = InitDatabase()
	})

	return db
}
func InitDatabase() *xorm.Engine {
	config := viper.GetStringMapString("database")
	dsn := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8mb4&parseTime=True&loc=Local", config["user"], config["pass"], config["host"], config["port"], config["name"])
	fmt.Println(dsn)
	db, err := xorm.NewEngine("mysql", dsn)
	if err != nil {
		panic(err)
	}
	// defer func(engine *xorm.Engine) {
	// 	err := engine.Close()
	// 	if err != nil {
	// 		panic(err)
	// 	}
	// }(db)

	db.SetLogger(log.NewSimpleLogger(os.Stdout))
	db.ShowSQL(true)

	// db.MapCacher(new(common.Language), nil)
	err = db.ClearCache(new(common.Language))
	if err != nil {
		panic(err)
	}

	// #### 迁移
	// err = db.Sync2(new(common.Category))
	// if err != nil {
	// 	panic(err)
	// }

	return db
}
